package xjtu.sad.zbsj.common.impl;

import xjtu.sad.zbsj.common.CommonService;
import xjtu.sad.zbsj.common.Constants;
import xjtu.sad.zbsj.common.Utils;
import xjtu.sad.zbsj.common.dao.CommonDao;
import xjtu.sad.zbsj.common.model.user.User;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;


@Service
@Transactional
public class  CommonServiceImpl implements CommonService {

	@Resource
	private CommonDao commonDao;

	@Override
	public User getUserByU_id(String u_id) {
		User user = commonDao.getUserByU_id(u_id);
		return commonDao.getUserByU_id(u_id);
	}

	@Override
	public String getU_avatarByU_name(String u_name) {
		String u_avatar = commonDao.getU_avatarByU_name(u_name);
		u_avatar = Constants.IMG_PATH_HOST + u_avatar;

		return u_avatar;
	}

	@Override
	public String selectU_nameByU_id(String u_id) {
		return commonDao.selectU_nameByU_id(u_id);
	}

//	@Override
//	public String addTime() {
//		String t_id = commonDao.getNewT_Id();
//		commonDao.addTime(t_id, Utils.getNow());
//		return t_id;
//	}

	@Override
	public String uploadImg(MultipartFile multipartFile, String u_id) throws Exception {
		/**
		 * 上传图片
		 */
		InputStream in = null; // 文件输入流
		in = multipartFile.getInputStream();
		String name = Utils.imgNameGenerator(); // 生成随机文件名
		String submittedFilename = multipartFile.getOriginalFilename();//原始文件名
		String originalMainName = submittedFilename.substring(0, submittedFilename.lastIndexOf(".")); // 原始文件的主文件名
		String suffix = submittedFilename.substring(submittedFilename.lastIndexOf(".")); // 原始文件后缀名
		String filename = name + suffix; // 组合新的文件全名

		// folder_path 是图片在服务器上存储的路径，每一个用户都有一个文件夹用来存储图片
		String folder_path = Utils.getImgPrefix() + u_id;

		// 如果这个文件夹不存在，则创建该文件夹
		if (!Utils.dirExists(folder_path)) {
			Utils.createDir(folder_path);
		}

		// 文件输出流
		OutputStream out = new FileOutputStream(folder_path + "/" + filename);

		byte[] b = new byte[10240];//容量为10240字节的缓存区
		int len = -1;//从输入流读取并放入缓存区的数据量

		while((len=in.read(b))!=-1){
			out.write(b,0,len);
		}
		out.flush();
		out.close();
		in.close();

		/*
		 * 压缩图像并获取压缩后的图像大小（单位：字节）
		 */
		Long size = Utils.compressImage(folder_path + "/" , filename);
		String urlSuffix = u_id+"/"+filename;

		// 需要返回的是前端能够使用的地址
		String img_url = Constants.IMG_PATH_HOST+urlSuffix;
		return img_url;
	}
}
